import { initState } from './state'
import { compileToFunction } from './compiler/index'

/**
 * Vue 初始化操作
 * @param Vue Vue实例
 */
export function initMixin (Vue) {
  /* 初始化流程 数据劫持 */
  Vue.prototype._init = function (options) {
    const vm = this
    vm.$options = options // Vue的实例属性

    initState(vm)

    if (vm.$options.el) {
      vm.$mount(vm.$options.el)
    }
  }

  /* 模板挂载 */
  Vue.prototype.$mount = function (el) {
    const vm = this
    const options = vm.$options
    el = document.querySelector(el)
    if (!options.render) {
      let template = options.template
      if (!template && el) {
        template = el.outerHTML
      }
      const render = compileToFunction(template)
      options.render = render
    }
  }
}

